//
// Created by DengLibin on 2019/1/14 0014.
//
#include <iostream>
#include <map>
using  namespace std;


/**
 * 罗马数字转整数
字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
*/
class Solution {
private:
    map<char, int> m;
    int parseInt(char romanChar){
        map<char,int>::iterator it = m.find(romanChar);
        return it == m.end() ? 0 : it->second;
    }
public:
    Solution(){
        m.insert(make_pair('I',1));
        m.insert(make_pair('I', 1));
        m.insert(make_pair('V', 5));
        m.insert(make_pair('X', 10));
        m.insert(make_pair('L', 50));
        m.insert(make_pair('C', 100));
        m.insert(make_pair('D', 500));
        m.insert(make_pair('M', 1000));
    }

    int romanToInt(string s) {
        int len = s.length();
        if(len == 0){
            return 0;
        }
        int sum = 0;
        for(int i =0, j = 1; i < len; i++, j++){ //双指针
            int x_sum = 0;
            int x_i = parseInt(s[i]); //指针i的值
            int x_j = 0; //指针j的值
            if(j < len){ //越界判断
                x_j = parseInt(s[j]);
            }
            if(x_i >= x_j){ //前一个大于后一个
                x_sum = x_i;
            }else{ //前一个小于后一个
                x_sum = x_j - x_i;
                i++; //移动指针 （for循环还会再移一次）
                j++; //移动指针
            }
            sum += x_sum;
        }
        return sum;
    }

};




int main62(){
    Solution s;
    int x = s.romanToInt("XX");
    cout << x <<endl;
    return  0;
}
